package com.itheima.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.reggie.common.R;
import com.itheima.reggie.dto.DishDto;
import com.itheima.reggie.entity.Dish;
import com.itheima.reggie.service.DishService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping("/dish")
@Slf4j
public class DishController {
    @Autowired
    private DishService dishService;

    @Autowired
    private RedisTemplate redisTemplate;
    /*
        保存菜品：
        接收到 菜品信息和口味信息
        菜品信息保存菜品表 sql
        口味信息保存到口味表，设置口味和菜品的关系 sql
     */
    @PostMapping
    public R save(@RequestBody DishDto dishDto){
        dishService.saveDishAndFlavors(dishDto);
        redisTemplate.delete("dish_"+dishDto.getCategoryId()+"_"+1);
        return R.success(null);
    }
    /*
        菜品的分页
     */
    @GetMapping("/page")
    public R<Page<DishDto>> page(Integer page,Integer pageSize,String name){
        Page<DishDto> pageInfo = dishService.pageDishAndCategoryName(page,pageSize,name);
        return R.success(pageInfo);
    }

    /*
        修改菜品的回显操作
     */
    @GetMapping("/{id}")
    public R<DishDto> findDishDtoById(@PathVariable Long id){
        DishDto dishDto = dishService.findDishDtoById(id);
        return R.success(dishDto);
    }

    /*
        修改菜品
     */
    @PutMapping
    public R update(@RequestBody DishDto dishDto){
        dishService.updateDishAndFlavor(dishDto);
        redisTemplate.delete("dish_"+dishDto.getCategoryId()+"_"+1);
        return R.success(null);
    }

    /*
        根据菜品分类的id，查询该菜品分类下的所有菜品
     */
    @GetMapping("/list")
    public R<List<DishDto>> findDishByCategoryId(Long categoryId,Integer status){
        //首先从redis中查询 dish_川菜id_1  dish_湘菜id_1
        List<DishDto> list = (List<DishDto>) redisTemplate.opsForValue().get("dish_" + categoryId + "_" + status);
        if(list!=null){
            //redis中有数据
            log.info("从redis中获取到了数据！！！！！");
            return R.success(list);
        }
        //根据分类id查询，带口味集合的dishDto的集合
        list = dishService.findDishDtoByCategoryId(categoryId,status);
        log.info("redis中没有数据，查询了数据库mysql！！！！");
        //如果redis中没有，从数据库中查询，并且存储一份进redis，下一回来查相同的分类下的菜品就有了。
        redisTemplate.opsForValue().set("dish_" + categoryId + "_" + status,list,60, TimeUnit.MINUTES);
        return R.success(list);
    }
}
